#include <iostream>
#include <cstring>
using namespace std;
const int N=1<<20;
const int INF=0x3f3f3f3f;
int a[110];
int dp[N];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	memset(dp,INF,sizeof(dp));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=k;j++)
		{
			int t;
			cin>>t;
			a[i]|=(1<<(t-1));
		}
	}
	
	dp[0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<(1<<m);j++)
		{
			dp[j|a[i]]=min(dp[j|a[i]],dp[j]+1);
		}
	}
	if(dp[(1<<m)-1]==INF)
	{
		cout<<-1<<endl;
	}
	else{
		cout<<dp[(1<<m)-1]<<endl;
	}
	return 0;
}
